home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / util / pack / xfdmaster.lha / xfd / Developer / Sources / ASM / COMatic.a < prev    next >
Text File  |  1999-02-05  |  7KB  |  343 lines

  1. * Programmheader
  2. *
  3. *    Name:        COMatic
  4. *    Author:        SDI
  5. *    Distribution:    PD
  6. *    Description:    XFD external decruncher for Crunch-O-Matic
  7. *    Compileropts:    -
  8. *    Linkeropts:    -
  9. *
  10. * 1.0   09.11.98 : first version
  11.  
  12. *************************************************************************
  13. *                                    *
  14. * This cruncher produces buggy files, most times in Packmode 2, but    *
  15. * the tested data was corrupt in mode 1 as well.            *
  16. *                                    *
  17. * I don't know if the cruncher or decruncher has this bug! As all files *
  18. * have same decrunch header I cannot test another one.            *
  19. *                                    *
  20. *************************************************************************
  21.  
  22.         INCLUDE    "AINCLUDE:IncDirs.i"
  23.         INCLUDE    "lvo.i"
  24.  
  25.         INCLUDE    "libraries/xfdmaster.i"
  26.         INCLUDE "dos/doshunks.i"
  27.         INCLUDE "exec/memory.i"
  28.  
  29.         * head function for tests
  30. *        INCLUDE    "xfdExeHead.a"
  31.  
  32. ForeMan        MOVEQ    #-1,D0
  33.         RTS
  34.  
  35.         DC.L    XFDF_ID
  36.         DC.W    1,0
  37.         DC.L    0,0,Slave1
  38.  
  39.         DC.B    "$VER: COMatic 1.0 (09.11.1998) by SDI",0
  40. N_COMaticE    DC.B    'Crunch-O-Matic 1.0',0
  41. N_COMaticD    DC.B    'Crunch-O-Matic 1.0 Data',0
  42. N_COMaticI    DC.B    'Crunch-O-Matic 1.0 IFF',0
  43. N_COMaticT    DC.B    'Crunch-O-Matic 1.0 Text',0
  44. N_COMaticM    DC.B    'Crunch-O-Matic 1.0 Module',0
  45.         EVEN
  46.  
  47. Slave1        DC.L    Slave2        ;no more slaves
  48.         DC.W    2        ;version
  49.         DC.W    36        ;master version
  50.         DC.L    N_COMaticE    ;name
  51.         DC.W    XFDPFF_RELOC    ;flags
  52.         DC.W    0
  53.         DC.L    RB_COMaticE    ;recog buffer
  54.         DC.L    DB_COMaticE    ;decrunch buffer
  55.         DC.L    0        ;recog segment
  56.         DC.L    0        ;decrunch segment
  57.         DC.W    0,0
  58.         DC.L    $F4        ;MinBufSize
  59.  
  60. Slave2        DC.L    Slave3        ;no more slaves
  61.         DC.W    2        ;version
  62.         DC.W    36        ;master version
  63.         DC.L    N_COMaticD    ;name
  64.         DC.W    XFDPFF_DATA    ;flags
  65.         DC.W    0
  66.         DC.L    RB_COMaticD    ;recog buffer
  67.         DC.L    DB_COMaticD    ;decrunch buffer
  68.         DC.L    0        ;recog segment
  69.         DC.L    0        ;decrunch segment
  70.         DC.W    0,0
  71.         DC.L    4        ;MinBufSize
  72.  
  73. Slave3        DC.L    Slave4        ;no more slaves
  74.         DC.W    2        ;version
  75.         DC.W    38        ;master version
  76.         DC.L    N_COMaticI    ;name
  77.         DC.W    XFDPFF_DATA    ;flags
  78.         DC.W    0
  79.         DC.L    RB_COMaticI    ;recog buffer
  80.         DC.L    DB_COMaticI    ;decrunch buffer
  81.         DC.L    0        ;recog segment
  82.         DC.L    0        ;decrunch segment
  83.         DC.W    0,0
  84.         DC.L    $7C        ;MinBufSize
  85.  
  86. Slave4        DC.L    Slave5        ;no more slaves
  87.         DC.W    2        ;version
  88.         DC.W    38        ;master version
  89.         DC.L    N_COMaticT    ;name
  90.         DC.W    XFDPFF_DATA    ;flags
  91.         DC.W    0
  92.         DC.L    RB_COMaticT    ;recog buffer
  93.         DC.L    DB_COMaticT    ;decrunch buffer
  94.         DC.L    0        ;recog segment
  95.         DC.L    0        ;decrunch segment
  96.         DC.W    0,0
  97.         DC.L    $7C        ;MinBufSize
  98.  
  99. Slave5        DC.L    0        ;no more slaves
  100.         DC.W    2        ;version
  101.         DC.W    38        ;master version
  102.         DC.L    N_COMaticM    ;name
  103.         DC.W    XFDPFF_DATA    ;flags
  104.         DC.W    0
  105.         DC.L    RB_COMaticM    ;recog buffer
  106.         DC.L    DB_COMaticM    ;decrunch buffer
  107.         DC.L    0        ;recog segment
  108.         DC.L    0        ;decrunch segment
  109.         DC.W    0,0
  110.         DC.L    $7C        ;MinBufSize
  111.  
  112. *************************************************************************
  113. *    Recog buffer function: receives buffer + length in A0/D0    *
  114. *************************************************************************
  115.  
  116. RB_COMaticE    MOVEQ    #0,D0            ; False
  117.  
  118.         CMP.L    #$000003F3,(A0)
  119.         BNE.B    .No
  120.         CMP.L    #$267AFFF6,$28(A0)
  121.         BNE.B    .No
  122.         CMP.L    #$245F2057,$64(A0)
  123.         BNE.B    .No
  124.         CMP.L    #$0800001E,$A0(A0)
  125.         BNE.B    .No
  126.         CMP.L    #$4A426706,$DC(A0)
  127.         BNE.B    .No
  128.         CMP.L    #$03E90002,$F0(A0)
  129.         BNE.B    .No
  130.         MOVEQ    #1,D0            ; True
  131. .No        RTS
  132.  
  133. RB_COMaticD    MOVEQ    #0,D0            ; False
  134.  
  135.         CMP.L    #$43BA4F4D,(A0)
  136.         BNE.B    .No
  137.         MOVEQ    #1,D0            ; True
  138. .No        RTS
  139.  
  140. RB_COMaticI    MOVEQ    #0,D0            ; False
  141.         CMP.L    #$F8,$20(A0)
  142.         BEQ.B    CheckCOMData
  143.         RTS
  144.  
  145. RB_COMaticT    MOVEQ    #0,D0            ; False
  146.         CMP.L    #$86,$20(A0)
  147.         BEQ.B    CheckCOMData
  148.         RTS
  149.  
  150. RB_COMaticM    MOVEQ    #0,D0            ; False
  151.         CMP.L    #$224,$20(A0)
  152.         BEQ.B    CheckCOMData
  153.         RTS
  154.  
  155. CheckCOMData    CMP.L    #$000003F3,(A0)
  156.         BNE.B    .No
  157.         CMP.L    #$D9CCD9CC,$28(A0)
  158.         BNE.B    .No
  159.         CMP.L    #$22402440,$50(A0)
  160.         BNE.B    .No
  161.         CMP.L    #$2F0B612E,$64(A0)
  162.         BNE.B    .No
  163.         CMP.L    #$0078612A,$78(A0)
  164.         BNE.B    .No
  165.         MOVEQ    #1,D0            ; True
  166. .No        RTS
  167.  
  168. *************************************************************************
  169. *    Decrunch buffer function: receives xfdbiBufferInfo in A0    *
  170. *************************************************************************
  171.  
  172. DB_COMaticM    MOVEM.L    D2-D7/A2-A6,-(A7)
  173.         MOVEA.L    xfdbi_SourceBuffer(A0),A4
  174.         MOVE.L    $8BE(A4),D7
  175.         MOVE.L    $8C2(A4),D6
  176.         MOVE.W    $8C6(A4),D5
  177.         LEA    $8C8(A4),A3
  178.         BSR.B    DecrunchCOM
  179.         MOVEM.L    (A7)+,D2-D7/A2-A6
  180.         RTS
  181.  
  182. DB_COMaticT    MOVEM.L    D2-D7/A2-A6,-(A7)
  183.         MOVEA.L    xfdbi_SourceBuffer(A0),A4
  184.         MOVE.L    $246(A4),D7
  185.         MOVE.L    $24A(A4),D6
  186.         MOVE.W    $24E(A4),D5
  187.         LEA    $250(A4),A3
  188.         BSR.B    DecrunchCOM
  189.         MOVEM.L    (A7)+,D2-D7/A2-A6
  190.         RTS
  191.  
  192. DB_COMaticI    MOVEM.L    D2-D7/A2-A6,-(A7)
  193.         MOVEA.L    xfdbi_SourceBuffer(A0),A4
  194.         MOVE.L    $40E(A4),D7
  195.         MOVE.L    $412(A4),D6
  196.         MOVE.W    $416(A4),D5
  197.         LEA    $418(A4),A3
  198.         BSR.B    DecrunchCOM
  199.         MOVEM.L    (A7)+,D2-D7/A2-A6
  200.         RTS
  201.  
  202. DB_COMaticD    MOVEM.L    D2-D7/A2-A6,-(A7)
  203.         MOVEA.L    xfdbi_SourceBuffer(A0),A4
  204.         MOVE.L    4(A4),D7
  205.         MOVE.L    8(A4),D6
  206.         MOVE.W    12(A4),D5
  207.         LEA    14(A4),A3
  208.         BSR.B    DecrunchCOM
  209.         MOVEM.L    (A7)+,D2-D7/A2-A6
  210.         RTS
  211.  
  212. DB_COMaticE    MOVEM.L    D2-D7/A2-A6,-(A7)
  213.         MOVEA.L    xfdbi_SourceBuffer(A0),A4
  214.         MOVE.L    $C6(A4),D7
  215.         MOVE.L    $CA(A4),D6
  216.         MOVE.W    $CE(A4),D5
  217.         LEA    $27C(A4),A3
  218.         BSR.B    DecrunchCOM
  219.         MOVEM.L    (A7)+,D2-D7/A2-A6
  220.         RTS
  221.  
  222. DecrunchCOM    MOVE.L    A0,A5
  223.         MOVE.L    D7,D0        * get destination length
  224.         MOVE.L    D0,xfdbi_TargetBufSaveLen(A5)
  225.         ADD.L    #$1000,D0
  226.         MOVE.L    D0,xfdbi_TargetBufLen(A5)
  227.  
  228.         MOVE.L    4.W,A6
  229.         MOVE.L    xfdbi_TargetBufMemType(A5),D1
  230.         JSR    _LVOAllocMem(A6)
  231.         MOVE.W    #XFDERR_NOMEMORY,xfdbi_Error(A5)
  232.         TST.L    D0
  233.         BEQ.B    .NoMem
  234.         MOVE.L    D0,xfdbi_TargetBuffer(A5)
  235.  
  236.         MOVEA.L    A3,A0
  237.         MOVEA.L    D0,A1
  238.         LEA    (A1,D6.L),A2
  239.         BSR.B    Decrunch
  240.         CMP.L    D6,D7
  241.         BEQ.B    .ok
  242.         MOVEA.L    xfdbi_TargetBuffer(A5),A0
  243.         LEA    (A0,D7.L),A2
  244.         MOVE.L    D6,D1
  245.         MOVE.W    D5,D0
  246.         LEA    $1000(A2),A1
  247.         ADDA.L    D1,A0
  248. .loop        MOVE.B    -(A0),-(A1)
  249.         SUBQ.L    #1,D1
  250.         BNE.B    .loop
  251.         BSR.W    Decrunch2
  252.  
  253. .ok        CLR.W    xfdbi_Error(A5)
  254.         MOVEQ    #1,D0                * set true
  255. .NoMem        RTS
  256.  
  257. *************************************************************************
  258. *    decrunch routine - copied from file (a bit modified)        *
  259. *************************************************************************
  260.  
  261. Decrunch    MOVEQ    #-$80,D3
  262. .Dec1        BSR.B    .DecS1
  263.         BCC.B    .Dec4
  264.         MOVEQ    #0,D2
  265.         BSR.B    .DecS1
  266.         BCC.B    .Dec3
  267.         MOVEQ    #3,D0
  268.         MOVEQ    #8,D2
  269. .Dec2        SUBQ.W    #2,D2
  270.         MOVE.B    .DecDat1(PC,D0.W),D4
  271.         BSR.B    .DecS2
  272.         CMP.W    .DecDat2(PC,D2.W),D1
  273.         DBNE    D0,.Dec2
  274.         MOVE.B    .DecDat3(PC,D0.W),D2
  275.         ADD.W    D1,D2
  276. .Dec3        MOVE.B    (A0)+,(A1)+
  277.         DBRA    D2,.Dec3
  278.         CMPA.L    A1,A2
  279.         BGT.B    .Dec4
  280.         RTS    
  281.  
  282. .DecS1        ADD.B    D3,D3
  283.         BNE.B    .DecS1E
  284.         MOVE.B    (A0)+,D3
  285.         ADDX.B    D3,D3
  286. .DecS1E        RTS    
  287. .DecS2        MOVEQ    #0,D1
  288. .DecS2L        BSR.B    .DecS1
  289.         ADDX.W    D1,D1
  290.         SUBQ.B    #1,D4
  291.         BPL.B    .DecS2L
  292.         RTS    
  293. .Dec4        MOVEQ    #4,D0
  294. .Dec5L        BSR.B    .DecS1
  295.         BCC.B    .Dec6
  296.         SUBQ.W    #1,D0
  297.         BNE.B    .Dec5L
  298. .Dec6        CLR.W    D1
  299.         MOVE.B    .DecDat4(PC,D0.W),D4
  300.         BMI.B    .Dec7
  301.         BSR.B    .DecS2
  302. .Dec7        MOVE.B    .DecDat5(PC,D0.W),D0
  303.         ADD.W    D1,D0
  304.         MOVEQ    #2,D4
  305.         BSR.B    .DecS2
  306.         MOVE.L    D1,D2
  307.         MOVE.B    .DecDat6(PC,D2.W),D4
  308.         ADD.W    D2,D2
  309.         BSR.B    .DecS2
  310.         ADD.W    .DecDat7(PC,D2.W),D1
  311.         MOVEA.L    A1,A3
  312.         SUBA.L    D1,A3
  313. .Dec8L        MOVE.B    (A3)+,(A1)+
  314.         DBRA    D0,.Dec8L
  315.         CMPA.L    A1,A2
  316.         BGT.B    .Dec1
  317.         RTS    
  318.  
  319. .DecDat1    DC.B    9,2,1,0
  320. .DecDat2    DC.W    $3FF,7,3,1
  321. .DecDat3    DC.B    $C,5,2,1
  322. .DecDat4    DC.B    9,1,0,-1,-1
  323. .DecDat5    DC.B    9,5,3,2,1
  324. .DecDat6    DC.B    3,5,5,6,7,8,9,10
  325. .DecDat7    DC.W    $1,$11,$51,$91,$111,$211,$411,$811
  326.  
  327. Decrunch2    MOVEQ    #0,D1
  328. .Decr1        MOVE.B    (A1)+,D1
  329.         CMP.W    D0,D1
  330.         BNE.B    .Decr3
  331.         MOVEQ    #0,D2
  332.         MOVE.B    (A1)+,D2
  333.         BEQ.B    .Decr3
  334.         MOVE.B    (A1)+,D1
  335. .Decr2L     MOVE.B    D1,(A0)+
  336.         DBRA    D2,.Decr2L
  337.         MOVE.B    D1,(A0)+
  338. .Decr3        MOVE.B    D1,(A0)+
  339.         CMPA.L    A0,A2
  340.         BGT.B    .Decr1
  341.         RTS    
  342.         END
  343.